package Abstract;
//抽象方法只能包含于抽象类中，并且不能含有方法体。
abstract class Class{
    abstract void fun();
}
abstract class Shape{
    int age =10;
    //抽象类父类中可以含有构造方法 用于初始化成员
    public Shape(int age){
        this.age = age;
    }
    public abstract void draw();
//    public void fun()
//    {
//        System.out.println("这是一个fun方法");
//    }

}
class Cycle extends Shape{
    public Cycle()
    {
        super(14);
    }

    //继承抽象类时 必须对父类的抽象方法进行重写


    @Override
    public void draw() {
        System.out.println("画一个⚪");
    }

    //    访问抽象类父类成员的普通字段
    public void fun()
    {
        System.out.println(super.age);
    }
}
class Triangle extends Shape{
    public Triangle()
    {
        super(19);
    }
    @Override
    public void draw()
    {
        System.out.println("画一个三角形");
    }
    public void fun()
    {
        System.out.println(super.age);
    }
}
public class Test {
    public static void ShapeMaps(Shape shape){//发生了向上转型
        shape.draw();
    }
    public static void main(String[] args) {
        Cycle cycle = new Cycle();
        cycle.fun();
        ShapeMaps(cycle);
        Triangle triangle = new Triangle();
        triangle.fun();
        ShapeMaps(triangle);
//        抽象类不能被实例化
//        Shape shape = new Shape();
    }
}
